package cn.onesdream.app.api.service;

import cn.onesdream.app.dao.entity.Planet;

import java.io.IOException;
import java.util.List;

/**
 * @author WangShiyu
 * @date 2021/2/9 23:03
 */
public interface PlanetService {
    /**
     * 获取用户所有星球（包括参与的他人星球）
     * @param userId 用户id
     * @return
     */
    List<Planet> getPlanetByUserId(Integer userId);

    /**
     * 获取公开星球
     * @param userId 用户id
     * @return
     */
    List<Planet> getPublicPlanet(Integer userId);

    /**
     * 随机获取星球
     * @param count 星球数量
     * @return
     */
    List<Planet> getRandomPlanet(Byte count);

    /**
     * 删除特定星球
     * @param planetId 星球id
     */
    void deletePlanet(Integer planetId);

    /**
     * 通过星球id返回星球详情
     * @param planetId 星球id
     * @return
     */
    Planet getPlanet(Integer planetId);

    /**
     * 修改星球信息
     * @param planetId 星球id
     * @param name 星球名称
     * @param description 星球描述介绍
     * @param shareUserId 星球参与共同协作作者id
     * @param typeId 星球类型
     * @return
     */
    Planet changePlanetInfo(Integer planetId, String name, String description, String shareUserId, Byte typeId);

    /**
     * 通过shareUserId来获取星球
     * @param shareUserId 星球参与共同协作作者id
     * @return
     */
    List<Planet> getPlanetByShareUserId(Integer shareUserId);

    /**
     * 通过ownUserId来获取星球
     * @param ownUserId 星球作者id
     * @return
     */
    List<Planet> getPlanetByOwnUserId(Integer ownUserId);

    /**
     * 添加星球
     * @param name 星球名称
     * @param description 星球描述介绍
     * @param ownUserId 星球作者id
     * @param shareUserId 星球参与共同协作作者id
     * @param typeId 星球类型
     * @param privateId 私密状态
     * @return
     */
    void addPlanet(String name, String description, Integer ownUserId, String shareUserId, Byte typeId, Byte privateId) throws IOException;
}
